package jp.syuriken.snsw.terenaibot.plugins;

import jp.syuriken.snsw.terenaibot.UserInfo;

/**
 * フォロー/フォロワーに関するプラグインインターフェース。
 * 
 * @author $Author: snswinhaiku.lo@gmail.com $
 */
public interface FriendshipHookPlugin extends RegisterablePlugin {
	
	/**
	 * フォローしたあとに呼び出されるフック
	 * 
	 * @param userInfo ユーザー情報
	 */
	void hookAfterFollow(UserInfo userInfo);
	
	/**
	 * アンフォローしたあとに呼び出されるフック
	 * 
	 * @param userInfo ユーザー情報
	 */
	void hookAfterUnfollow(UserInfo userInfo);
	
	/**
	 * フォローする前に呼び出されるフック。falseを返すとフォローは中止されます (すべてのフックは呼び出されます)。
	 * デフォルトでは必ず true を返して下さい。
	 * 
	 * @param userId ユーザーID
	 * @return フォローを許可するかどうか。
	 */
	boolean hookBeforeFollow(String userId);
	
	/**
	 * アンフォローする前に呼び出されるフック。falseを返すとフォローは中止されます (すべてのフックは呼び出されます)。
	 * デフォルトでは必ず true を返して下さい。
	 * 
	 * @param userId ユーザーID
	 * @return アンフォローを許可するかどうか。
	 */
	boolean hookBeforeUnfollow(String userId);
	
	/**
	 * 新しいフォロワーが出現しました。
	 * @param newFollowers 新しいフォロワーのリスト
	 */
	void hookNewFollower(UserInfo[] newFollowers);
	
	/**
	 * 新しいアンフォロワーが出現しました。
	 * 
	 * @param newUnfollowers 新しいアンフォロワーのリスト
	 */
	void hookNewUnfollower(UserInfo[] newUnfollowers);
}
